﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.Enumerations;
using System.IO;
using log4net;
using System.Collections;
using Telerik.WinControls.Data;
namespace QuanLyNhaSach
{
    public partial class frmPhieuChi : Form
    {
        public frmPhieuChi()
        {
            InitializeComponent();
        }

        //Tao Parttern Seleton
        static frmPhieuChi doituong = null;
        sv_QuanLyNhaSach.AdapterClient service = new sv_QuanLyNhaSach.AdapterClient();
        private ILog logger;
        //public string manv_phieuchi = frmDangNhap.maNV_FromDangNhap;
        string manv_phieuchi = frmDangNhap.maNV_FromDangNhap;
        public static frmPhieuChi TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmPhieuChi();
            return doituong;
        }

        //private void bt_anhien_ToggleStateChanged(object sender, Telerik.WinControls.UI.StateChangedEventArgs args)
        //{
        //    logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        //    try
        //    {
        //        if (!(bt_anhien.ToggleState == ToggleState.On))
        //        {
        //            bt_anhien.Text = "Trở lại";
        //            gv_phieuchi.Visible = false;
        //            this.Width = 625;
        //            this.Height = 290;
        //        }
        //        else
        //        {
        //            bt_anhien.Text = "Lọc HD chưa trả hết";
        //            gv_phieuchi.Visible = true;
        //            this.Width = 625;
        //            this.Height = 501;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }

        //}
        ArrayList test_DSNCC;
        private void frmPhieuChi_Load(object sender, EventArgs e)
        {
            dtpngaychi.Value = DateTime.Now;
            try
            {
                Load_NCC();
                dtpngaychi.Focus();
                cmbkhoanmuc.SelectedIndex = 0;
                //lbtennv.Text = frmDangNhap.hoTenNV_FormDangNhap;
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }

        }
        private void Load_NCC()
        {
            try
            {
                test_DSNCC = new ArrayList();
                DataSet ds = new DataSet();
                ds.ReadXml(new StringReader(service.selectqueryByText("select MaNCC,TenNCC,DiaChiNCC from NhaCungCap where MaNCC not like 'NCC0000   '")));
                if (ds.Tables.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        test_DSNCC.Add(ds.Tables[0].Rows[i]["TenNCC"].ToString().Trim());
                    }
                    cmbncc.DataSource = ds.Tables[0];
                    cmbncc.DisplayMember = "TenNCC";
                    cmbncc.ValueMember = "MaNCC";
                    cmbncc.SelectedIndex = -1;
                }
                FilterDescriptor des_ncc = new FilterDescriptor(this.cmbncc.DisplayMember, FilterOperator.StartsWith, string.Empty);
                cmbncc.EditorControl.FilterDescriptors.Add(des_ncc);
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }

        }

        //private void cmbncc_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        gv_phieuchi.DataSource = null;
        //        txtdiachi.Enabled = false;
        //        DataSet ds = new DataSet();
        //        ds.ReadXml(new StringReader(service.selectqueryByText("select diachincc from nhacungcap where mancc='" + cmbncc.SelectedValue.ToString() + "'")));
        //        if (ds.Tables.Count > 0)
        //        {
        //            txtdiachi.Text = ds.Tables[0].Rows[0][0].ToString();
        //        }
        //        DataSet ds1 = new DataSet();
        //        ds1.ReadXml(new StringReader(service.selectqueryByText("select hd.mahdnh,k.makho,k.tenkho,tongthanhtien,sotiendadua,sotienconlai,ngaynhap,ngayhenthanhtoan,vat,chungtunh from NhaCungCap n,HoaDonNhapHang hd,Kho k where k.MaKho=hd.MaKho and hd.MaNCC=n.MaNCC and n.MaNCC='" + cmbncc.SelectedValue.ToString() + "' ")));
        //        if (ds1.Tables.Count > 0)
        //        {
        //            ds1.Tables[0].Columns.Add("stt", typeof(int));
        //            DataRow dr;
        //            for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
        //            {
        //                dr = ds1.Tables[0].NewRow();
        //                dr["stt"] = i + 1;
        //                ds1.Tables[0].Rows[i]["stt"] = dr["stt"].ToString();
        //                if (ds1.Tables[0].Rows[i]["TongThanhTien"].ToString().Contains(".0000") == true)
        //                    ds1.Tables[0].Rows[i]["TongThanhTien"] = ds1.Tables[0].Rows[i]["TongThanhTien"].ToString().Replace(".0000", " ");
        //                if (ds1.Tables[0].Rows[i]["SotienDaDua"].ToString().Contains(".0000") == true)
        //                    ds1.Tables[0].Rows[i]["SotienDaDua"] = ds1.Tables[0].Rows[i]["SotienDaDua"].ToString().Replace(".0000", " ");
        //                if (ds1.Tables[0].Rows[i]["SoTienConLai"].ToString().Contains(".0000") == true)
        //                    ds1.Tables[0].Rows[i]["SoTienConLai"] = ds1.Tables[0].Rows[i]["SoTienConLai"].ToString().Replace(".0000", " ");
        //            }
        //            gv_phieuchi.DataSource = ds1.Tables[0];
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }

        //}

        //private void bt_them_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        string mapc = xulyma();
        //        string mancc = cmbncc.SelectedValue.ToString();
        //        string khoanmuc = cmbkhoanmuc.Text;
        //        DateTime ngaychi = dtpngaychi.Value;
        //        string lydochi = txtlydochi.Text;
        //        double tienchi = double.Parse(txttientra.Text);
        //        string sochungtu = txtsochungtu.Text;
        //        if (!service.InsertPhieuChi(mapc, mancc, manv_phieuchi, ngaychi, khoanmuc, lydochi, tienchi, sochungtu))
        //        {

        //        }
        //        else
        //        {
        //            MessageBox.Show("Thêm thành công");
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }

        //}
        private string xulyma()
        {            
            DataSet ds_tam = new DataSet();
            string mamoi="";
            try
            {
                string chuoi = "PC" + DateTime.Today.Year.ToString("0000") + DateTime.Today.Month.ToString("00");
                ds_tam.ReadXml(new StringReader(service.selectqueryByText("select top 1 mapc from phieuchi where mapc like '%" + chuoi + "%'order by mapc desc")));
                if (ds_tam.Tables.Count == 0)
                    mamoi = chuoi + "0001";
                else
                {
                    string matam = ds_tam.Tables[0].Rows[0][0].ToString();
                    string kituso = matam.Substring(8, 4).ToString();
                    int somoi = int.Parse(kituso) + 1;
                    mamoi = chuoi + somoi.ToString("0000");
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }


            return mamoi;
        }

        private void cmbncc_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbncc.SelectedIndex!=-1)
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(new StringReader(service.BaoCaoCongNo(DateTime.Now, DateTime.Now, cmbncc.SelectedValue.ToString().Trim(), "", true)));
                    if (ds.Tables.Count > 0)
                    {

                        txtcongno.Text = double.Parse(ds.Tables[0].Rows[0]["nocuoiky"].ToString().Trim()).ToString("#,##0");
                    }
                    txtdiachi.Text = cmbncc.EditorControl.Rows[cmbncc.SelectedIndex].Cells["diachincc"].Value.ToString();
                }
                else
                {
                    txtcongno.Text = "0";
                    txtdiachi.Text = "";
                }
            }
            catch { }
        }

        private void txttientra_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txttientra.Text.Length != 0)
                {
                    txttientra.Text = double.Parse(txttientra.Text).ToString("#,##0");

                    txttientrachu.Text = So_chu(double.Parse(txttientra.Text));
                }
                //cho con tro ve cuoi textbox
                txttientra.SelectionStart = txttientra.Text.Length;
            }
            catch { }
        }


        //private void txttientra_TextChanged(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (txttientra.Text.Length>0)
        //        {
        //            txttientrachu.Text = So_chu(double.Parse(txttientra.Text));
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }

        //}
        #region "Ham chuyen so thanh chu"
        private static string Chu(string gNumber)
        {
            string result = "";
            switch (gNumber)
            {
                case "0":
                    result = "không";
                    break;
                case "1":
                    result = "một";
                    break;
                case "2":
                    result = "hai";
                    break;
                case "3":
                    result = "ba";
                    break;
                case "4":
                    result = "bốn";
                    break;
                case "5":
                    result = "năm";
                    break;
                case "6":
                    result = "sáu";
                    break;
                case "7":
                    result = "bảy";
                    break;
                case "8":
                    result = "tám";
                    break;
                case "9":
                    result = "chín";
                    break;
            }
            return result;
        }
        private static string Donvi(string so)
        {
            string Kdonvi = "";

            if (so.Equals("1"))
                Kdonvi = "";
            if (so.Equals("2"))
                Kdonvi = "nghìn";
            if (so.Equals("3"))
                Kdonvi = "triệu";
            if (so.Equals("4"))
                Kdonvi = "tỷ";
            if (so.Equals("5"))
                Kdonvi = "nghìn tỷ";
            if (so.Equals("6"))
                Kdonvi = "triệu tỷ";
            if (so.Equals("7"))
                Kdonvi = "tỷ tỷ";

            return Kdonvi;
        }
        private static string Tach(string tach3)
        {
            string Ktach = "";
            if (tach3.Equals("000"))
                return "";
            if (tach3.Length == 3)
            {
                string tr = tach3.Trim().Substring(0, 1).ToString().Trim();
                string ch = tach3.Trim().Substring(1, 1).ToString().Trim();
                string dv = tach3.Trim().Substring(2, 1).ToString().Trim();
                if (tr.Equals("0") && ch.Equals("0"))
                    Ktach = " không trăm lẻ " + Chu(dv.ToString().Trim()) + " ";
                if (!tr.Equals("0") && ch.Equals("0") && dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm ";
                if (!tr.Equals("0") && ch.Equals("0") && !dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm lẻ " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (tr.Equals("0") && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm mười " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("0"))
                    Ktach = " không trăm mười ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("5"))
                    Ktach = " không trăm mười lăm ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười " + Chu(dv.Trim()).Trim() + " ";

                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười lăm ";

            }


            return Ktach;

        }
        public static string So_chu(double gNum)
        {
            if (gNum == 0)
                return "Không đồng";

            string lso_chu = "";
            string tach_mod = "";
            string tach_conlai = "";
            double Num = Math.Round(gNum, 0);
            string gN = Convert.ToString(Num);
            int m = Convert.ToInt32(gN.Length / 3);
            int mod = gN.Length - m * 3;
            string dau = "[+]";

            // Dau [+ , - ]
            if (gNum < 0)
                dau = "[-]";
            dau = "";

            // Tach hang lon nhat
            if (mod.Equals(1))
                tach_mod = "00" + Convert.ToString(Num.ToString().Trim().Substring(0, 1)).Trim();
            if (mod.Equals(2))
                tach_mod = "0" + Convert.ToString(Num.ToString().Trim().Substring(0, 2)).Trim();
            if (mod.Equals(0))
                tach_mod = "000";
            // Tach hang con lai sau mod :
            if (Num.ToString().Length > 2)
                tach_conlai = Convert.ToString(Num.ToString().Trim().Substring(mod, Num.ToString().Length - mod)).Trim();

            ///don vi hang mod 
            int im = m + 1;
            if (mod > 0)
                lso_chu = Tach(tach_mod).ToString().Trim() + " " + Donvi(im.ToString().Trim());
            /// Tach 3 trong tach_conlai

            int i = m;
            int _m = m;
            int j = 1;
            string tach3 = "";
            string tach3_ = "";

            while (i > 0)
            {
                tach3 = tach_conlai.Trim().Substring(0, 3).Trim();
                tach3_ = tach3;
                lso_chu = lso_chu.Trim() + " " + Tach(tach3.Trim()).Trim();
                m = _m + 1 - j;
                if (!tach3_.Equals("000"))
                    lso_chu = lso_chu.Trim() + " " + Donvi(m.ToString().Trim()).Trim();
                tach_conlai = tach_conlai.Trim().Substring(3, tach_conlai.Trim().Length - 3);

                i = i - 1;
                j = j + 1;
            }
            if (lso_chu.Trim().Substring(0, 1).Equals("k"))
                lso_chu = lso_chu.Trim().Substring(10, lso_chu.Trim().Length - 10).Trim();
            if (lso_chu.Trim().Substring(0, 1).Equals("l"))
                lso_chu = lso_chu.Trim().Substring(2, lso_chu.Trim().Length - 2).Trim();
            if (lso_chu.Trim().Length > 0)
                lso_chu = dau.Trim() + " " + lso_chu.Trim().Substring(0, 1).Trim().ToUpper() + lso_chu.Trim().Substring(1, lso_chu.Trim().Length - 1).Trim() + " đồng chẵn.";

            return lso_chu.ToString().Trim();

        }
        #endregion
        KiemTraBatLoi batloi = new KiemTraBatLoi();
        private void btLuu_Click(object sender, EventArgs e)
        {
            Luu();
        }

        private void Luu()
        {
            errorProvider1.Clear();
            if (txtsochungtu.Text == "")
            {
                errorProvider1.SetError(txtsochungtu, "Số chứng từ không được bỏ trống");
                txtsochungtu.Focus();
                return;
            }
            if (test_DSNCC.Contains(cmbncc.Text) == false)
            {
                errorProvider1.SetError(cmbncc, "Nhà cung cấp không họp lệ");
                cmbncc.Focus();
                return;
            }
            if (cmbkhoanmuc.Text.Trim() == "")
            {
                errorProvider1.SetError(cmbkhoanmuc, "khoản mục không họp lệ");
                cmbkhoanmuc.Focus();
                return;
            }
            if (txttientra.Text == "")
            {
                errorProvider1.SetError(txttientra, "Tiền chi không được để trống hoặc bằng 0");
                txttientra.Focus();
                return;
            }
            string mapc = xulyma();

            if (MessageBox.Show("Bạn có muốn thêm phiếu chi này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
            {
                if (!service.InsertPhieuChi(mapc, cmbncc.SelectedValue.ToString().Trim(), manv_phieuchi, dtpngaychi.Value, cmbkhoanmuc.Text, txtlydochi.Text, double.Parse(txttientra.Text), txtsochungtu.Text))
                {
                    MessageBox.Show("Lưu thất bại!", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    MessageBox.Show("Lưu thành công!", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cmbncc.SelectedIndex = -1;
                    txtdiachi.Text = "";
                    txtcongno.Text = "0";
                    txtlydochi.Text = "";
                    txttientra.Text = "";
                    txttientrachu.Text = "";
                    txtsochungtu.Text = "";
                    cmbkhoanmuc.SelectedIndex = -1;
                    dtpngaychi.Value = DateTime.Now;
                    dtpngaychi.Focus();
                }
            }
        }

        private void TextBoxKeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void frmPhieuChi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData==Keys.F3)
            {
                Luu();
            }
        }

        private void txtsochungtu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbncc.Focus();
        }

        private void cmbncc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbkhoanmuc.Focus();
        }

        private void cmbkhoanmuc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txtlydochi.Focus();
        }

        private void txtlydochi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txttientra.Focus();
        }

        private void txttientra_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                btLuu.Focus();
        }

        private void dtpngaychi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txtsochungtu.Focus();
        }

        private void bt_home_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bt_timkiem_Click(object sender, EventArgs e)
        {
            frmBC_CongNoKhachHang cnkh = new frmBC_CongNoKhachHang();
            cnkh.Show();
        }

        private void bt_xemin_Click(object sender, EventArgs e)
        {

        }

        //private void bt_luu_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        string mapc = xulyma();
        //        string mancc = cmbncc.SelectedValue.ToString();
        //        string khoanmucchi = cmbkhoanmuc.Text;
        //        string lydochi = txtlydochi.Text;
        //        DateTime ngaychi = dtpngaychi.Value;
        //        double sotienchi = double.Parse( txttientra.Text);
        //        string chungtu = txtsochungtu.Text;
        //        if (!service.InsertPhieuChi(mapc, mancc, manv_phieuchi, ngaychi, khoanmucchi, lydochi, sotienchi, chungtu))
        //        { }
        //        else
        //        {
        //            string mahdnh;
        //            double sotiendatra, sotienconlai, sotienthanhtoan;
        //            for (int i = 0; i < gv_phieuchi.Rows.Count; i++)
        //            {
        //                if (gv_phieuchi.Rows[i].Cells[7].Value != null)
        //                {
        //                    mahdnh = gv_phieuchi.Rows[i].Cells["mahdnh"].Value.ToString();
        //                    sotiendatra = double.Parse(gv_phieuchi.Rows[i].Cells[4].Value.ToString());
        //                    sotienconlai = double.Parse(gv_phieuchi.Rows[i].Cells[5].Value.ToString());
        //                    sotienthanhtoan = double.Parse(gv_phieuchi.Rows[i].Cells[6].Value.ToString());
        //                    service.selectqueryByText("update hoadonnhaphang set sotiendadua=" + (sotiendatra + sotienthanhtoan) + ", sotienconlai=" + (sotienconlai - sotienthanhtoan) + " where mahdnh='" + mahdnh + "'");
        //                }
        //            }
        //        }

        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }
        //}
        //double tongtienthanhtoan = 0;
        //bool kt = false;
        //private void gv_phieuchi_CellValueChanged(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        //{
        //    try
        //    {
        //        if (gv_phieuchi.CurrentRow.Cells[6].Value != null)
        //        {
        //            tongtienthanhtoan = 0;

        //            if (kt == false)
        //            {
        //                for (int i = 0; i < gv_phieuchi.Rows.Count; i++)
        //                {
        //                    if (gv_phieuchi.Rows[i].Cells[7].Value != null)
        //                    {
        //                        tongtienthanhtoan += double.Parse(gv_phieuchi.Rows[i].Cells[6].Value.ToString());
        //                    }
        //                }
        //                txttientra.Text = tongtienthanhtoan.ToString();
        //                gv_phieuchi.CurrentRow.Cells[7].Value = true;
        //                kt = true;
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }
        //}

        //private void frmPhieuChi_KeyDown(object sender, KeyEventArgs e)
        //{
        //    try
        //    {
        //        if (e.KeyCode == Keys.Enter)
        //        {
        //            SendKeys.Send("{TAB}");
        //            kt = false;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }
        //}
    }
}
